﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Runtime.InteropServices;
using System.Drawing;

namespace Sigos
{
    class Utilidades
    {
        private string _justificativa;
        /// <summary>
        /// Metodo para enviar uma mensagem de confirmação
        /// </summary>
        /// <param name="Mensagem"></param>
        /// <returns></returns>
        public bool Confirmacao(string Mensagem)
        {
            if (MessageBox.Show(Mensagem, "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        /// <summary>
        /// Método para o botão de Sair...
        /// </summary>
        /// <returns></returns>
        public bool Sair()
        {

            if (Confirmacao("Tem certeza que deseja sair dessa tela?") == true)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        public bool Excluir()
        {

                if (Confirmacao("Tem certeza que deseja excluir esse registro?") == true)
                {
                    return true;
                }
                else
                {
                    return false;
                }

        }
        /// <summary>
        /// Verifica se um e-mail é válido
        /// <summary>
        public bool ValidaEmail(string str)
        {
            if (!string.IsNullOrEmpty(str))
            {
                Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
                return regex.IsMatch(str);
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        /// Apaga todos os textboxes de uma página, recursivamente
        /// <summary>
        public void LimpaCampos(Control.ControlCollection controles)
        {
            foreach (Control ctrl in controles)
            {
                if (ctrl is TextBox)
                {
                    ((TextBox)(ctrl)).Clear();
                }
                //if (ctrl is ComboBox)
                //{
                //    ((ComboBox)(ctrl)).SelectedIndex = -1;
                //}
                LimpaCampos(ctrl.Controls);
            }
        }
        /// <summary>
        /// Função para tirar formatação de uma string como ".,/)(-" ""
        /// </summary>
        /// <param name="texto">Palavra ou Campo a ser "Limpo"</param>
        /// <returns></returns>
        public string removeFormatacao(string texto)
        {
            string txt = "";

            txt = texto.Replace(".", "");
            txt = txt.Replace("-", "");
            txt = txt.Replace(",", "");
            txt = txt.Replace("/", "");
            txt = txt.Replace("(", "");
            txt = txt.Replace(")", "");
            txt = txt.Replace(" ", "");

            return txt;
        }
        /// <summary>
        /// Função para tirar acento das palavras
        /// </summary>
        /// <param name="palavra">Palavra ou Campo a ser "Limpo"</param>
        /// <returns></returns>
        public string TirarAcento(string palavra)
        {
            string palavraSemAcento = "";
            string caracterComAcento = "áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ";
            string caracterSemAcento = "aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC";

            for (int i = 0; i < palavra.Length; i++)
            {
                if (caracterComAcento.IndexOf(Convert.ToChar(palavra.Substring(i, 1))) >= 0)
                {
                    int car = caracterComAcento.IndexOf(Convert.ToChar(palavra.Substring(i, 1)));
                    palavraSemAcento += caracterSemAcento.Substring(car, 1);
                }
                else
                {
                    palavraSemAcento += palavra.Substring(i, 1);
                }
            }

            return palavraSemAcento;
        }
        /// <summary>
        /// Função para tirar os acentos de uma string e também remover a formatação
        /// </summary>
        /// <param name="texto"></param>
        /// <returns></returns>
        public string VarreString(string texto)
        {
            string textolimpo = removeFormatacao(texto);
            string textoFinal = TirarAcento(textolimpo);
            return textoFinal;
        }
        /// <summary>
        /// Metodo para enviar uma mensagem de aviso
        /// </summary>
        /// <param name="Mensagem">Mensagem de informação a ser enviada</param>
        /// <returns></returns>
        public void Informacao(string Mensagem)
        {
            MessageBox.Show(Mensagem, "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        /// <summary>
        /// Metodo para enviar uma mensagem de Erro
        /// </summary>
        /// <param name="Mensagem">Mensagem de erro a ser enviada</param>
        /// <returns></returns>
        public void Erro(string Mensagem)
        {
            MessageBox.Show(Mensagem, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        [DllImport("DllInscE32.DLL")]public static extern int ConsisteInscricaoEstadual(string sIE, string sUF);
        /// <summary>
        /// Função para validação de Inscrição Estadual, necessario usar "DLLInscE32.DLL"
        /// </summary>
        /// <param name="sIE"> Numero da Inscrição Estadual</param>
        /// <param name="sUF">Sigla da Unidade da Federação</param>
        /// <param name="sCampo">Nome do Campo que contem o número</param>
        public void ValidaIE(string sIE, string sUF, TextBox sCampo)
        {
            if (ConsisteInscricaoEstadual(sIE, sUF) != 0)
            {
                sCampo.BackColor = Color.Red;
                sCampo.ForeColor = Color.White;
                sCampo.Focus();
                Erro("I.E. Inválida, confira os numeros e tente novamente!");

            }
            else
            {
                sCampo.BackColor = Color.White;
                sCampo.ForeColor = Color.Black;
            }
        }

            private bool testaCPF(string vrCPF)
        {
            string valor = vrCPF.Replace(".", "");
            valor = valor.Replace("-", "");
 
            if (valor.Length != 11)
                return false;
 
            bool igual = true;
            for (int i = 1; i < 11 && igual; i++)
                if (valor[i] != valor[0])
                    igual = false;
 
            if (igual || valor == "12345678909")
                return false;
 
            int[] numeros = new int[11];
 
            for (int i = 0; i < 11; i++)
              numeros[i] = int.Parse(
                valor[i].ToString());
 
            int soma = 0;
            for (int i = 0; i < 9; i++)
                soma += (10 - i) * numeros[i];
 
            int resultado = soma % 11;
 
            if (resultado == 1 || resultado == 0)
            {
                if (numeros[9] != 0)
                    return false;
            }
            else if (numeros[9] != 11 - resultado)
                return false;
 
            soma = 0;
            for (int i = 0; i < 10; i++)
                soma += (11 - i) * numeros[i];
 
            resultado = soma % 11;
 
            if (resultado == 1 || resultado == 0)
            {
                if (numeros[10] != 0)
                    return false;
            }
            else
                if (numeros[10] != 11 - resultado)
                    return false;
 
            return true;
        }

            private bool testaCNPJ(string vrCNPJ)
            {
                string CNPJ = vrCNPJ.Replace(".", "");
                CNPJ = CNPJ.Replace("/", "");
                CNPJ = CNPJ.Replace("-", "");
                CNPJ = CNPJ.Replace(",", "");

                int[] digitos, soma, resultado;
                int nrDig;
                string ftmt;
                bool[] CNPJOk;

                ftmt = "6543298765432";
                digitos = new int[14];
                soma = new int[2];
                soma[0] = 0;
                soma[1] = 0;
                resultado = new int[2];
                resultado[0] = 0;
                resultado[1] = 0;
                CNPJOk = new bool[2];
                CNPJOk[0] = false;
                CNPJOk[1] = false;

                try
                {
                    for (nrDig = 0; nrDig < 14; nrDig++)
                    {
                        digitos[nrDig] = int.Parse(
                            CNPJ.Substring(nrDig, 1));
                        if (nrDig <= 11)
                            soma[0] += (digitos[nrDig] *
                              int.Parse(ftmt.Substring(
                              nrDig + 1, 1)));
                        if (nrDig <= 12)
                            soma[1] += (digitos[nrDig] *
                              int.Parse(ftmt.Substring(
                              nrDig, 1)));
                    }

                    for (nrDig = 0; nrDig < 2; nrDig++)
                    {
                        resultado[nrDig] = (soma[nrDig] % 11);
                        if ((resultado[nrDig] == 0) || (
                             resultado[nrDig] == 1))
                            CNPJOk[nrDig] = (
                            digitos[12 + nrDig] == 0);
                        else
                            CNPJOk[nrDig] = (
                            digitos[12 + nrDig] == (
                            11 - resultado[nrDig]));
                    }
                    return (CNPJOk[0] && CNPJOk[1]);
                }
                catch
                {
                    return false;
                }
            }
        /// <summary>
        /// Validação de campos de CNPJ e digito verificador
        /// </summary>
        /// <param name="vCNPJ">String com os numeros do documento</param>
            /// <param name="sCampo">Nome do campo do tipo "MaskedTextBox" para validação</param>
        public void ValidaCNPJ(string vCNPJ, MaskedTextBox sCampo)
        {
            if (testaCNPJ(vCNPJ) == false)
            {
                sCampo.BackColor = Color.Red;
                sCampo.ForeColor = Color.White;
                sCampo.Focus();
                Erro("CNPJ inválido, confira os números e tente novamente!");
            }
            else
            {
                sCampo.BackColor = Color.White;
                sCampo.ForeColor = Color.Black;
            }
        }

        /// <summary>
        /// Validação de campos de CNPJ e digito verificador em campos textbox
        /// </summary>
        /// <param name="vCNPJ">String com os numeros do documento</param>
        /// <param name="sCampo">Nome do campo do tipo "TextBox" para validação</param>
        public void ValidaCNPJSM(string vCNPJ, TextBox sCampo)
        {
            if (testaCNPJ(vCNPJ) == false)
            {
                sCampo.BackColor = Color.Red;
                sCampo.ForeColor = Color.White;
                sCampo.Focus();
                Erro("CNPJ inválido, confira os números e tente novamente!");
            }
            else
            {
                sCampo.BackColor = Color.White;
                sCampo.ForeColor = Color.Black;
            }
        }




        /// <summary>
        /// Validação de campos de CPF e digito verificador
        /// </summary>
        /// <param name="vCNPJ">String com os numeros do documento</param>
        /// <param name="sCampo">Nome do campo do tipo "MaskedTextBox" para validação</param>
        public void ValidaCPF(string vCPF, MaskedTextBox sCampo)
        {
            if (testaCPF(vCPF) == false)
            {
                sCampo.BackColor = Color.Red;
                sCampo.ForeColor = Color.White;
                sCampo.Focus();
                Erro("CPF inválido, confira os números e tente novamente!");
            }
            else
            {
                sCampo.BackColor = Color.White;
                sCampo.ForeColor = Color.Black;
            }
        }

        /// <summary>
        /// Validação de campos de CPF e digito verificador em campos textbox
        /// </summary>
        /// <param name="vCNPJ">String com os numeros do documento</param>
        /// <param name="sCampo">Nome do campo do tipo "TextBox" para validação</param>
        public void ValidaCPFSM(string vCPF, TextBox sCampo)
        {
            if (testaCPF(vCPF) == false)
            {
                sCampo.BackColor = Color.Red;
                sCampo.ForeColor = Color.White;
                sCampo.Focus();
                Erro("CPF inválido, confira os números e tente novamente!");
            }
            else
            {
                sCampo.BackColor = Color.White;
                sCampo.ForeColor = Color.Black;
            }
        }

        private static string m_NumeroPedido;
        public static string NumeroPedido
        {
            get { return m_NumeroPedido; }
            set { m_NumeroPedido = value; }
        }

        private static int m_Usuario;
        public static int Usuario
        {
            get { return m_Usuario; }
            set { m_Usuario = value; }
        }

        private static int m_ItemQtd;
        public static int ItemQtd
        {
            get { return m_ItemQtd; }
            set { m_ItemQtd = value; }
        }

        public void InserirProdutosNoPedido(string vNumeroPedido, int vCodigoProduto, int vQuantidade, decimal vDesconto)
        {
            try
            {
                var NumeroPedido = int.Parse(vNumeroPedido);
                using (SigosEntities Entidades = new SigosEntities())
                {
                    var Produto = Entidades.Produtos2.Where(Prod => Prod.CodigoProduto == vCodigoProduto).FirstOrDefault();

                    PedidoDetalhes Det = new PedidoDetalhes();
                    Det.CodigoPedido = NumeroPedido;
                    Det.CodigoProduto = vCodigoProduto;
                    Det.Quantidade = vQuantidade;
                    Det.ValorUnitario = decimal.Parse(Produto.Valor.ToString());
                    Det.Desconto = vDesconto;

                    Entidades.AddObject("PedidoDetalhes", Det);
                    Entidades.SaveChanges();
                    Informacao("Produto inserido com sucesso");
                }
            }
            catch
            {
                Erro("Erro ao inserir o produto no pedido");
            }
        }

        public void SoNumeros(KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
            {
                e.Handled = true;
            }
        }

        private static decimal m_ValorItem;
        public static decimal ValorItemDesconto
        {
            get { return m_ValorItem; }
            set { m_ValorItem = value; }
        }

        private static string vJustificativa;
        public string Justificativa
        {
            get { return vJustificativa; }
            set { vJustificativa = value; }
        }

        private static int vNumeroConta;
        public static int NumeroConta
        {
            get { return vNumeroConta; }
            set { vNumeroConta = value; }
        }
        //private static int m_ValorItem;
        //public static int ValorItem
        //{
        //    get { return m_ValorItem; }
        //    set { m_ValorItem = value; }
        //}
    }
}
